home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / Draw / Sources / DrawLink.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  8.5 KB  |  273 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                DrawLink.h
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Author:                Henri Lamiraux
  7. //
  8. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  9. //
  10. //========================================================================================
  11.  
  12. #ifndef DRAWLINK_H
  13. #define DRAWLINK_H
  14.  
  15. // ----- Part Layer -----
  16.  
  17. #ifndef FWLNKDST_H
  18. #include "FWLnkDst.h"
  19. #endif
  20.  
  21. #ifndef FWLNKSRC_H
  22. #include "FWLnkSrc.h"
  23. #endif
  24.  
  25. #ifndef FWLNKMGR_H
  26. #include "FWLnkMgr.h"
  27. #endif
  28.  
  29. #ifndef FWPOINT_H
  30. #include "FWPoint.h"
  31. #endif
  32.  
  33. //========================================================================================
  34. //    Forward Declarations
  35. //========================================================================================
  36.  
  37. class FW_CFrame;
  38. class FW_CCloneInfo;
  39.  
  40. class CBaseShape;
  41. class CDrawSelection;
  42. class CDrawPart;
  43. class CDrawContent;
  44. class CDrawLinkContent;
  45. class CDrawLinkSourceContent;
  46. class CGroupShape;
  47.  
  48. //========================================================================================
  49. //    class CDrawPublishLink
  50. //========================================================================================
  51.  
  52. class CDrawPublishLink : public FW_CLinkSource
  53. {
  54.   public:
  55.     CDrawPublishLink(Environment* ev, 
  56.                     ODUpdateID updateID, 
  57.                     FW_CPresentation* presentation,
  58.                     CDrawSelection* drawSelection,
  59.                     FW_Boolean saveSelection);
  60.     virtual ~ CDrawPublishLink();
  61.     
  62.     //--- FW_CLinkSource overrides
  63.     virtual void        LinkEstablished(Environment* ev);
  64.     virtual void        ExternalizeLinkContent(Environment* ev, ODStorageUnit* linkSU);
  65.     
  66.     virtual void        DoExternalizeLink(Environment* ev, ODStorageUnit* storageUnit,
  67.                                           FW_CCloneInfo* cloneInfo);
  68.  
  69.     virtual FW_Boolean    HasEmbeddedFrame(Environment* ev, ODFrame* odEmbeddedFrame);
  70.  
  71.     virtual void        RevealLinkSource(Environment* ev, FW_CFrame* frame);
  72.  
  73.     virtual void        BreakLink(Environment* ev);
  74.     virtual void        RestoreLink(Environment* ev, FW_CPart* part);
  75.  
  76.     //--- Part-specific
  77.     void                AddShape(Environment* ev, CBaseShape* shape);
  78.     FW_Boolean            IsEmpty();
  79.     void                RemoveShape(Environment* ev, CBaseShape* shape);
  80.     virtual FW_Boolean IsOKtoUpdate(Environment* ev, FW_Boolean forceUpdate = FALSE);
  81.  
  82.  
  83.   private:
  84.     CDrawSelection*            fDrawSelection;
  85.     CDrawLinkSourceContent*    fPublishedContent;
  86. };
  87.  
  88. //========================================================================================
  89. // class CDrawPublishLinkCollection
  90. //========================================================================================
  91.  
  92. class CDrawPublishLinkCollection : public FW_TOrderedCollection<CDrawPublishLink>
  93. {
  94. public:
  95.     FW_DECLARE_AUTO(CDrawPublishLinkCollection)
  96.     
  97.     CDrawPublishLinkCollection() :
  98.         FW_TOrderedCollection<CDrawPublishLink>(){}
  99.     ~CDrawPublishLinkCollection() {}
  100. };
  101.  
  102.  
  103.  
  104. //========================================================================================
  105. // class CDrawPublishLinkCollectionIterator
  106. //========================================================================================
  107.  
  108. class CDrawPublishLinkCollectionIterator : public FW_TOrderedCollectionIterator<CDrawPublishLink>
  109. {
  110. public:
  111.     FW_DECLARE_AUTO(CDrawPublishLinkCollectionIterator)
  112.     
  113.     CDrawPublishLinkCollectionIterator(CDrawPublishLinkCollection* collection) :
  114.         FW_TOrderedCollectionIterator<CDrawPublishLink>(collection){}
  115.     ~CDrawPublishLinkCollectionIterator() {}
  116. };
  117.  
  118. //========================================================================================
  119. //    class CDrawSubscribeLink
  120. //========================================================================================
  121.  
  122. class CDrawSubscribeLink : public FW_CLinkDestination
  123. {
  124.     friend class CDrawLinkManager;
  125.  
  126.   public:
  127.     CDrawSubscribeLink(Environment* ev, ODLink* odLink,
  128.                         FW_CPresentation* presentation, 
  129.                         CDrawSelection* drawSelection,
  130.                         ODLinkInfo* linkInfo,
  131.                         FW_Boolean createGroupShape=true);
  132.     virtual ~ CDrawSubscribeLink();
  133.  
  134.     //--- FW_CLinkDestination Overrides ---
  135.     virtual FW_Boolean    DoUpdateLink(Environment* ev, ODStorageUnit* linkContentSU, ODPasteAsResult* embedAsInfo);
  136.     virtual void        BreakLink(Environment* ev);
  137.     virtual void        LinkEstablished(Environment* ev);
  138.  
  139.     virtual void        DoExternalizeLink(Environment* ev, ODStorageUnit* storageUnit,
  140.                                       FW_CCloneInfo* cloneInfo);
  141.  
  142.     virtual FW_CFrame*    GetContainingFrame(Environment* ev, ODFrame* odEmbeddedFrame);
  143.  
  144.     //--- Draw part-specific ---
  145.   public:
  146.     void DeleteShapes(Environment* ev);
  147.     void SelectShapes(Environment* ev);
  148.  
  149.     void AdjustUpdateOffset(Environment* ev, const FW_CPoint& delta);
  150.     void SetUpdateOffset(Environment* ev, const FW_CPoint& offset);
  151.     
  152.   private:
  153.     void UpdateLinkedContent(Environment* ev);
  154.     
  155.     void AddShape(Environment* ev, CBaseShape* shape);
  156.     void SetGroupShape(Environment* ev, CGroupShape* shape);
  157.  
  158.   private:
  159.     CDrawPart*                        fDrawPart;
  160.     CDrawSelection*                    fDrawSelection;
  161.     CDrawLinkContent*                fLinkedContent;
  162.     CGroupShape*                    fGroupShape;
  163.     FW_CPoint                        fUpdateOffset;
  164.     FW_Boolean                        fFirstUpdate;
  165.     FW_Boolean                        fFirstOffset;
  166.     FW_Boolean                        fCalcGroupOffset;
  167. };
  168.  
  169. //----------------------------------------------------------------------------------------
  170. inline void CDrawSubscribeLink::SetUpdateOffset(Environment*, const FW_CPoint& offset)
  171. {
  172.     fUpdateOffset = offset;
  173.     fCalcGroupOffset = false;
  174. }
  175.  
  176. //========================================================================================
  177. // class CDrawSubscribeLinkCollection
  178. //========================================================================================
  179.  
  180. class CDrawSubscribeLinkCollection : public FW_TOrderedCollection<CDrawSubscribeLink>
  181. {
  182. public:
  183.     FW_DECLARE_AUTO(CDrawSubscribeLinkCollection)
  184.     
  185.     CDrawSubscribeLinkCollection() :
  186.         FW_TOrderedCollection<CDrawSubscribeLink>(){}
  187.     ~CDrawSubscribeLinkCollection() {}
  188. };
  189.  
  190.  
  191.  
  192. //========================================================================================
  193. // class CDrawSubscribeLinkCollectionIterator
  194. //========================================================================================
  195.  
  196. class CDrawSubscribeLinkCollectionIterator : public FW_TOrderedCollectionIterator<CDrawSubscribeLink>
  197. {
  198. public:
  199.     FW_DECLARE_AUTO(CDrawSubscribeLinkCollectionIterator)
  200.     
  201.     CDrawSubscribeLinkCollectionIterator(CDrawSubscribeLinkCollection* collection) :
  202.         FW_TOrderedCollectionIterator<CDrawSubscribeLink>(collection){}
  203.     ~CDrawSubscribeLinkCollectionIterator() {}
  204. };
  205.  
  206.  
  207. //========================================================================================
  208. //    class CDrawLinkManager
  209. //========================================================================================
  210.  
  211. class CDrawLinkManager : public FW_CLinkManager
  212. {
  213. //----------------------------------------------------------------------------------------
  214. //    Constructors/Destructors
  215. //
  216.   public:
  217.     FW_DECLARE_AUTO(CDrawLinkManager)
  218.  
  219.     CDrawLinkManager(Environment* ev, CDrawPart* thePart);
  220.     virtual ~CDrawLinkManager();
  221.  
  222. //----------------------------------------------------------------------------------------
  223. //    Override Methods
  224. //
  225.   public:
  226.     virtual FW_CLinkSource*     NewLinkSource(Environment* ev, 
  227.                                               ODUpdateID updateID, 
  228.                                               FW_CPresentation* presentation);
  229.     virtual FW_CLinkDestination* NewLinkDestination(Environment* ev, 
  230.                                                     ODLink* odLink,
  231.                                                     ODLinkInfo* linkInfo,
  232.                                                     FW_CPresentation* presentation);
  233.  
  234.     virtual ODLinkSource*        CreateLink(Environment* ev, ODByteArray* data);
  235.  
  236.     virtual void                DoChangeLinkStatus(Environment* ev, ODFrame* odFrame);
  237.                                 // formerly named LinkStatusChanged
  238.  
  239. //----------------------------------------------------------------------------------------
  240. //    Support for Persistent Links
  241. //
  242.   public:
  243.     virtual FW_CLinkSource*        DoInternalizeOneSourceLink(Environment* ev, 
  244.                                                            ODStorageUnit* storageUnit,
  245.                                                            ODUpdateID updateID);
  246.     virtual FW_CLinkDestination* DoInternalizeOneDestLink(Environment* ev, 
  247.                                                          ODStorageUnit* storageUnit,
  248.                                                          ODLink* odLink, 
  249.                                                          ODLinkInfo* linkInfo);
  250.  
  251.     virtual ODValueType            GetSourceLinkFormat(Environment* ev);
  252.     virtual ODValueType            GetDestLinkFormat(Environment* ev);
  253.  
  254.   private:
  255.     ODULong GetSUValue(Environment* ev, ODStorageUnit* su, unsigned long size, void *buffer);
  256.  
  257. //----------------------------------------------------------------------------------------
  258. //    Support for Undo/Redoing PasteAs
  259. //
  260.   public:
  261.     virtual void UndoPasteAs(Environment* ev, CDrawSubscribeLink* link);
  262.     virtual void RedoPasteAs(Environment* ev, CDrawSubscribeLink* link);
  263.  
  264.     
  265.  
  266. //----------------------------------------------------------------------------------------
  267. //    Data Members
  268. //
  269.   private:
  270.     CDrawPart*        fDrawPart;
  271. };
  272.  
  273. #endif